"use strict";

const Controller = require("egg").Controller;

class CodeController extends Controller {
    /**
     * 获取验证码
     */
    async create() {
        // 从路径参数中，获取手机号参数
        const { mobile } = this.ctx.params;
        // 查询该手机号用户是否存在
        let user = await this.service.user.findByMobile(mobile);
        // 要登录的用户不存在
        if (!user) {
            this.ctx.body = {
                code: 404,
                message: "该手机号未录入",
            };
            return;
        }
        // 查询是否已经存在该手机号的验证码，60 秒内，不允许重复获取
        let res = await this.service.code.findByMobile(mobile);
        // 说明存在验证码记录，看看是否已经超过 60 秒，否则不允许重复获取
        if (res) {
            // 60 秒后才能重新生成验证码
            let allowTime = Date.parse(res.create_time) + 60000;
            // 还在 60 秒内，不允许重复获取
            if (allowTime > Date.now()) {
                this.ctx.body = {
                    code: 403,
                    data: {
                        create_time: res.create_time,
                    },
                    message: "不允许频繁获取验证码",
                };
                return;
            }
            // 可以重新获取了，清除以前的 code
            await this.service.code.removeByMobile(mobile);
        }
        // 重新生成一个新的 code
        let code = this.ctx.helper.randomVerifyCode();
        // 保存到数据库
        res = await this.service.code.create(mobile, code);
        // 保存失败
        if (res.affectedRows !== 1) {
            this.ctx.body = {
                code: 500,
                message: "验证码发送失败",
            };
            return;
        }
        // 保存成功，返回验证码
        this.ctx.body = {
            code: 200,
            message: "验证码发送成功",
        };
    }
}

module.exports = CodeController;
